package org.example;

import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;

import java.util.List;

/**
 * 图像叠加
 */
public class ImageStacker {
    /**
     * 将多个图像叠加在一起
     * 此方法接收一个Mat对象的列表，代表要叠加的图像
     * 它会创建一个与第一个图像大小和类型相同的Mat对象来存储叠加后的图像
     * 然后，它将列表中的每个图像与当前的叠加图像相加，最后除以图像的数量，以获得平均叠加效果
     *
     * @param images 图像列表，每个图像都是一个Mat对象
     * @return 叠加后的图像，作为一个Mat对象返回
     */
    public static Mat stackImages(List<Mat> images) {
        // 创建一个与第一个图像大小和类型相同的Mat对象，用于存储叠加后的图像
        Mat stackedImage = new Mat(images.get(0).size(), images.get(0).type(), new Scalar(0));
        // 遍历图像列表，将每个图像与当前的叠加图像相加
        for (Mat image : images) {
            Core.add(stackedImage, image, stackedImage);
        }
        // 将叠加后的图像除以图像的数量，以获得平均叠加效果
        Core.divide(stackedImage, new Scalar(images.size()), stackedImage);
        // 返回叠加后的图像
        return stackedImage;
    }
}
